// var i;
// var $eventManager = require("./EventManager");
// var $resKeeper = require("./ResKeeper");
// var $commonUtils = require("./CommonUtils");
// var $evenType = require("./EvenType");
// var $nodePoolMag = require("./NodePoolMag");
// var $uI_AttackInfo = require("./UI_AttackInfo");
// var h = cc._decorator;
// var f = h.ccclass;
// var g = h.property;
// var _ = h.inspector;
// var y = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.item = null;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.addEvent = function () {
//         $eventManager.EventMgr.addEventListener($evenType.EVENT_TYPE.Game_ShangHai_FeiZi, this.onPiaoZi, this);
//     };
//     t.prototype.rmEvent = function () {
//         $eventManager.EventMgr.rmEventListener($evenType.EVENT_TYPE.Game_ShangHai_FeiZi, this.onPiaoZi, this);
//     };
//     t.prototype.onPiaoZi = function (e, t, o, n) {
//         if (void 0 === n) {
//             n = 1;
//         }
//         var i = $nodePoolMag.NodePoolMag.instance.getNode("piaozi");
//         if (!i) {
//             $nodePoolMag.NodePoolMag.instance.createNodeCount("piaozi", 1, this.item);
//             i = $nodePoolMag.NodePoolMag.instance.getNode("piaozi");
//         }
//         i.stopAllActions();
//         if (o) {
//             var a = $commonUtils.default.limitInteger(0, o.width / 2);
//             if (Math.random() > 0.5) {
//                 a = -a;
//             }
//             t.x = a;
//             t.y = 0;
//             o.addChild(i);
//             if (2 == n) {
//                 i.zIndex = 1;
//             } else {
//                 i.zIndex = 0;
//             }
//         } else {
//             t = this.node.convertToNodeSpaceAR(t);
//             t = this.generateRandomPoint(t, 50);
//             this.node.addChild(i);
//             i.zIndex = 2 == n ? 1 : 0;
//         }
//         i.getComponent($uI_AttackInfo.default).setValue(e, n);
//         i.x = t.x;
//         i.y = t.y + 80;
//         i.opacity = 255;
//         cc.tween(i)
//             .to(0.1, {
//                 scale: 1.5
//             })
//             .to(0.3, {
//                 scale: 1
//             })
//             .call(function () {})
//             .start();
//         cc.tween(i)
//             .to(0.1, {
//                 y: i.y + 100
//             })
//             .to(0.3, {
//                 y: i.y + 120
//             })
//             .delay(0.1)
//             .to(0.05, {
//                 opacity: 0
//             })
//             .call(function () {
//                 $nodePoolMag.NodePoolMag.instance.recycleNode("piaozi", i);
//             })
//             .start();
//     };
//     t.prototype.generateRandomPoint = function (e, t) {
//         var o = 2 * Math.random() * Math.PI;
//         var n = Math.random() * t;
//         return e.add(new cc.Vec2(Math.cos(o) * n, Math.sin(o) * n));
//     };
//     __decorate([g(cc.Prefab)], t.prototype, "item", void 0);
//     return __decorate([f], t);
// })($resKeeper.default);
// exports.default = y;


// import { EventMgrInstance } from "./EventManager";
// import ResKeeper from "./ResKeeper";
// import CommonUtils from "./CommonUtils";
// import { EVENT_TYPE } from "./EvenType";
// import { NodePoolMag } from "./NodePoolMag";
// import UI_AttackInfo from "./UI_AttackInfo";

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * 建议类名: AttackInfoHandler
//  */
// @ccclass
// class UI_ShowAttackInfo extends ResKeeper {
//     @property(cc.Prefab)
//     item: cc.Prefab = null;

//     /**
//      * 添加事件监听
//      * 建议方法名: addEventListener
//      */
//     addEvent(): void {
//         EventMgrInstance.addEventListener(EVENT_TYPE.Game_ShangHai_FeiZi, this.onPiaoZi, this);
//     }

//     /**
//      * 移除事件监听
//      * 建议方法名: removeEventListener
//      */
//     rmEvent(): void {
//         EventMgrInstance.rmEventListener(EVENT_TYPE.Game_ShangHai_FeiZi, this.onPiaoZi, this);
//     }

//     /**
//      * 处理漂字事件
//      * @param e 漂字内容
//      * @param t 漂字位置
//      * @param o 父节点
//      * @param n 漂字类型
//      * 建议方法名: handlePiaoZi
//      */
//     onPiaoZi(e: any, t: cc.Vec2, o: cc.Node | null, n: number = 1): void {
//         let node = NodePoolMag.instance.getNode("piaozi");
//         if (!node) {
//             NodePoolMag.instance.createNodeCount("piaozi", 1, this.item);
//             node = NodePoolMag.instance.getNode("piaozi");
//         }
//         node.stopAllActions();
//         if (o) {
//             let offsetX = CommonUtils.limitInteger(0, o.width / 2);
//             if (Math.random() > 0.5) {
//                 offsetX = -offsetX;
//             }
//             t.x = offsetX;
//             t.y = 0;
//             o.addChild(node);
//             node.zIndex = n === 2 ? 1 : 0;
//         } else {
//             t = this.node.convertToNodeSpaceAR(t);
//             t = this.generateRandomPoint(t, 50);
//             this.node.addChild(node);
//             node.zIndex = n === 2 ? 1 : 0;
//         }
//         node.getComponent(UI_AttackInfo).setValue(e, n);
//         node.x = t.x;
//         node.y = t.y + 80;
//         node.opacity = 255;
//         cc.tween(node)
//             .to(0.1, { scale: 1.5 })
//             .to(0.3, { scale: 1 })
//             .call(() => { })
//             .start();
//         cc.tween(node)
//             .to(0.1, { y: node.y + 100 })
//             .to(0.3, { y: node.y + 120 })
//             .delay(0.1)
//             .to(0.05, { opacity: 0 })
//             .call(() => {
//                 NodePoolMag.instance.recycleNode("piaozi", node);
//             })
//             .start();
//     }

//     /**
//      * 生成随机点
//      * @param e 原始点
//      * @param t 半径
//      * @returns 随机点
//      * 建议方法名: getRandomPoint
//      */
//     generateRandomPoint(e: cc.Vec2, t: number): cc.Vec2 {
//         const angle = 2 * Math.random() * Math.PI;
//         const radius = Math.random() * t;
//         return e.add(new cc.Vec2(Math.cos(angle) * radius, Math.sin(angle) * radius));
//     }
// }

// export default UI_ShowAttackInfo;


import { EventMgrInstance } from "./EventManager";
import ResKeeper from "./ResKeeper";
import CommonUtils from "./CommonUtils";
import { EVENT_TYPE } from "./EvenType";
import { NodePoolMag } from "./NodePoolMag";
import ViewAttackInfo from "./UI_AttackInfo";

const { ccclass, property, inspector } = cc._decorator;

/**
 * 建议类名: AttackInfoHandler
 */
@ccclass
class ViewShowAttackInfo extends ResKeeper {
    @property(cc.Prefab)
    item: cc.Prefab = null;

    /**
     * 添加事件监听
     * 建议方法名: addEventListener
     */
    addEventListener(): void {
        EventMgrInstance.addListener(EVENT_TYPE.Game_ShangHai_FeiZi, this.handlePiaoZi, this);
    }

    /**
     * 移除事件监听
     * 建议方法名: removeEventListener
     */
    removeEventListener(): void {
        EventMgrInstance.removeListener(EVENT_TYPE.Game_ShangHai_FeiZi, this.handlePiaoZi, this);
    }

    /**
     * 处理漂字事件
     * @param e 漂字内容
     * @param t 漂字位置
     * @param o 父节点
     * @param n 漂字类型
     * 建议方法名: handlePiaoZi
     */
    handlePiaoZi(e: any, t: cc.Vec2, o: cc.Node | null, n: number = 1): void {
        let node = NodePoolMag.instance.getNodeFromPool("piaozi");
        if (!node) {
            NodePoolMag.instance.createNodePool("piaozi", 1, this.item);
            node = NodePoolMag.instance.getNodeFromPool("piaozi");
        }
        node.stopAllActions();
        if (o) {
            let offsetX = CommonUtils.limitIntegerInRange(0, o.width / 2);
            if (Math.random() > 0.5) {
                offsetX = -offsetX;
            }
            t.x = offsetX;
            t.y = 0;
            o.addChild(node);
            node.zIndex = n === 2 ? 1 : 0;
        } else {
            t = this.node.convertToNodeSpaceAR(t);
            t = this.getRandomPoint(t, 50);
            this.node.addChild(node);
            node.zIndex = n === 2 ? 1 : 0;
        }
        node.getComponent(ViewAttackInfo).updateValue(e, n);
        node.x = t.x;
        node.y = t.y + 80;
        node.opacity = 255;
        cc.tween(node)
            .to(0.1, { scale: 1.5 })
            .to(0.3, { scale: 1 })
            .call(() => { })
            .start();
        cc.tween(node)
            .to(0.1, { y: node.y + 100 })
            .to(0.3, { y: node.y + 120 })
            .delay(0.1)
            .to(0.05, { opacity: 0 })
            .call(() => {
                NodePoolMag.instance.recycleNodeToPool("piaozi", node);
            })
            .start();
    }

    /**
     * 生成随机点
     * @param e 原始点
     * @param t 半径
     * @returns 随机点
     * 建议方法名: getRandomPoint
     */
    getRandomPoint(e: cc.Vec2, t: number): cc.Vec2 {
        const angle = 2 * Math.random() * Math.PI;
        const radius = Math.random() * t;
        return e.add(new cc.Vec2(Math.cos(angle) * radius, Math.sin(angle) * radius));
    }
}

export default ViewShowAttackInfo;